﻿/* 
 * Produzido por:
 *      Daniel Vargas
 *      Danilo Valvezon
 *      Fernanda Osaki
 *      Tiago Ricardo Almeida da Silva
 *      
 * FATEC São Caetano do Sul
 * Jogos NA6
 * */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace bomberboyonline
{
    // Classe que representa objeto item
    class Item : Microsoft.Xna.Framework.DrawableGameComponent
    {
        // Decalaracao de variaveis
        private Texture2D textura;
        public const int BOMBAEXTRA=0, PODERFOGO=1, CHUTE=3, DETONADOR=2, VELOCIDADE=4,  BRANCO = 5;
        private int posicao, tipo, contTipo;
        private bool visivel, destruindo;
        private Game game;

        // Construtor da classe
        public Item(Game game, int tipo, int posicao)
            : base(game)
        {
            // Atribuicao de valores das variaveis
            this.game = game;
            this.posicao = posicao;
            this.tipo = tipo;
            contTipo = 0;
            textura = game.Content.Load<Texture2D>("imagens\\powerup");
            visivel = false;
        }

        /// <summary>
        /// Allows the game component to perform any initialization it needs to before starting
        /// to run.  This is where it can query for any required services and load content.
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();
        }

        /// <summary>
        /// Allows the game component to update itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Update(GameTime gameTime)
        {
            verificaImagem(); // invoca metodo que verifica mudanca de imagem de item
            base.Update(gameTime);
        }

        /// <summary>
        /// Allows the game component to draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Draw(GameTime gameTime)
        {
            // Pega o Spritebatch do Services
            SpriteBatch sBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));
            // Desenha o fundo
            sBatch.Draw(textura, new Rectangle(Coordenadas.retangulos[posicao].X, Coordenadas.retangulos[posicao].Y, 45, 40), new Rectangle(45*tipo ,0, 45, 40), Color.White);

            base.Draw(gameTime);
        }

        // Metodo que modifica imagem de item caso seja necessario
        public void verificaImagem()
        {
            if (destruindo) // se objeto estah sendo destruido
            {
                if (tipo >= 8) // se chegou a ultima imagem de destruicao
                {
                    game.Components.Remove(this); //remove item do jogo
                }
                else // se nao
                {
                    if (contTipo == 4) // verifica se cont de mudanca de imagem cegou no valor desejado
                    {
                        contTipo = 0; // se sim zera contador e
                        tipo++; // incrementa posicao da imagem                        
                    }
                    else // se nao 
                    {
                        contTipo++; // incrementa contador de mudanca de imagem
                    }
                }
            }
        }

        // Metodo que seta destroicao de item 
        public void destruir()
        {
            if (visivel) // se o item é visivel
            {
                destruindo = true; // destroi
                tipo = BRANCO; // muda imagem para branco
            }
        }

        // gets e sets dasvariaveis necessarias
        public int getPosicao()
        {
            return posicao;
        }

        public int getTipo()
        {
            return tipo;
        }

        public void setVisivel(bool valor)
        {
            visivel = valor;
        }
    }
}
